home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fritz: All Fritz
/
All Fritz.zip
/
All Fritz
/
FILES
/
COMMADIO
/
RBBS3.LZH
/
XMODEM.ASM
< prev
next >
Wrap
Assembly Source File
|
1985-09-14
|
3KB
|
86 lines
; Modified 8/24/85 for use with QuickBasic Compiler
XM_CALC SEGMENT PUBLIC 'CODESG'
ASSUME CS:XM_CALC
PUBLIC XMODEM
;
CHK_SUM DB 0
CRC_VAL DW 0 ;CRC VARIABLE
STRG_LEN DW 0 ;CHANGED TO LENGTH OF STRING PASSED
STRG_LOC DW 0
STRG_MSG DB 255 DUP (' ') ;COMMAND CHARS (+CR) GO INTO HERE
;
;
CRC_CALC PROC ;AT TIME OF CALL:
MOV CX,0008H ; AL=CHARACTER
MOV BX,CRC_VAL
LOOP0:
SHL AL,1
RCL BX,1
JNC LOOP1
XOR BX,1021H
LOOP1:
LOOP LOOP0
MOV CRC_VAL,BX
RET
CRC_CALC ENDP
;
;
XMODEM PROC FAR
PUSH BP
MOV BP,SP
MOV CHK_SUM,0 ;INITIALIZE
MOV CRC_VAL,0
;
MOV SI,[BP+14] ;GET STRING DESCRIPTOR
MOV BL,[SI+ 2] ;REARRANGE LOW/HIGH BYTES
MOV BH,[SI+ 3] ;NOW BX HOLDS THE ADDRESS OF THE STRING
MOV STRG_LOC,BX ;STORE IT
MOV AX,[SI] ;GET STRING LENGTH
MOV STRG_LEN,AX ;STORE IT
;
MOV CX,STRG_LEN ;STORE LENGTH IN CX
MOV SI,STRG_LOC ;STORE OFFSET TO STRING IN SI
PUSH CS
POP ES
MOV DI,OFFSET STRG_MSG ;ES:DI = LOCATION OF VARIABLE
REP MOVSB ;FILL STRG_MSG WITH STRING
;
PUSH DS ;SAVE DS
PUSH CS
POP DS
MOV CX,0 ;INITIALIZE COUNTER TO 0
LOOP:
MOV BX,OFFSET STRG_MSG
ADD BX,CX
PUSH CX ;SAVE CX
MOV AL,[BX]
ADD AL,CHK_SUM ;ADD AL TO CHK_SUM
MOV CHK_SUM,AL
MOV AL,[BX] ;SET AL TO CHARACTER BEFORE CALL
CALL CRC_CALC ;CALL CRC CALC
POP CX ;RESTORE CX
INC CX ;INCREMENT COUNTER
CMP CX,STRG_LEN
JL LOOP ;LOOP UNTIL ALL CHARS PROCESSED
;
POP DS ;RESTORE DS
MOV BX,CS:CRC_VAL ;PASS BACK THE CRC VALUE
MOV SI,[BP+ 6] ;AND CRC HIGH AND LOW BYTES
MOV [SI],BL
MOV SI,[BP+ 8]
MOV [SI],BH
MOV SI,[BP+10]
MOV [SI],BX
MOV BL,CS:CHK_SUM ;PASS BACK THE CHECK SUM
MOV SI,[BP+12]
MOV [SI],BL
;
PUSH CS ;CLEAN UP WORK TO RETURN TO BASIC
POP ES
POP BP
RET 10
XMODEM ENDP
XM_CALC ENDS
END